/*
 * Copyright (c) 2025 CAX Conversion Project
 */
package com.comac.ins.bomt.service;

import com.comac.ins.bomt.domain.*;
import com.comac.ins.bomt.domain.vo.DetailOriginalBomVo;
import com.comac.ins.bomt.domain.vo.DetailStandardBomVo;
import com.comac.ins.bomt.domain.vo.SummaryStatusStrengthChangeVo;
import com.comac.ins.bomt.domain.vo.SummaryStrengthStandardChangeVo;
import com.comac.ins.common.core.domain.model.LoginUser;

import java.util.List;
import java.util.Map;

/**
 * Bom核心服务
 *
 * @author zhanghongyi
 * @date 2024 /8/28
 * @description BomConvertService
 */
public interface BomCoreService {
    /**
     * 从原始装机清单转化为标准装机清单
     *
     * @param loginUser          the login user
     * @param originalBomVos     the original bom vos
     * @param reverseGroupConfig the reverse group config
     * @param deleteWords        the delete words
     * @param aircraftModel      the aircraft model
     * @param track              the track
     * @return the map
     */
    Map<String, List<DetailStandardBomVo>> convertOriginToStandard(LoginUser loginUser, List<DetailOriginalBomVo> originalBomVos, Map<String, String> reverseGroupConfig, List<String> deleteWords, String aircraftModel, String track, List<String> noticeMessages);

    /**
     * 标准装机清单转化为强度数模清单
     *
     * @param loginUser          the login user
     * @param standardBomDetails the standard bom details
     * @param deleteWords 删除关键词
     * @return the list
     */
    List<DetailStrengthBom> convertStandardToStrength(LoginUser loginUser, List<DetailStandardBom> standardBomDetails, List<String> deleteWords);

    /**
     * 标准装机清单明细转化为强度数模清单明细
     *
     * @param loginUser the login user
     * @param ord       the ord
     * @param detail    the detail
     * @return the detail strength bom
     */
    DetailStrengthBom convertDetailStandardToStrength(LoginUser loginUser, Long ord, DetailStandardBom detail);

    /**
     * 对比模型状态清单和强度数模清单
     *
     * @param loginUser             the login user
     * @param bomInfo               the bom info
     * @param strengthChangeDetails the strength change details
     * @param modelStatusDetails    the model status details
     * @return the summary status strength change vo
     */
    SummaryStatusStrengthChangeVo compareStatusStrength(LoginUser loginUser, BomInfo bomInfo, List<DetailStrengthStandardChange> strengthChangeDetails, List<DetailModelStatus> modelStatusDetails);

    /**
     * 对比强度数模清单和标准装机清单
     *
     * @param loginUser          the login user
     * @param bomInfo            the bom info
     * @param standardBomDetails the standard bom details
     * @param strengthBomDetails the strength bom details
     * @return the summary strength standard change vo
     */
    SummaryStrengthStandardChangeVo compareStrengthStandard(LoginUser loginUser, BomInfo bomInfo, List<DetailStandardBom> standardBomDetails, List<DetailStrengthBom> strengthBomDetails);
}
